In a computing environment using distributed storage, such as a storage area network (SAN) or network-attached storage (NAS), storage may be provided to one or more users or applications using a highly abstracted infrastructure. This means that the characteristics and locations of the disk drives, storage arrays, and servers where the actual storage takes place are typically hidden from the user or application accessing the storage. The user or application accesses the distributed storage by referencing its symbolic or virtual location, and the distributed storage system automatically translates the virtual location into a physical location where the requested storage is actually stored and forwards the storage request to the physical device at that location. This allows the vendor providing the storage to exercise extensive flexibility in deciding how and where to implement the storage as the distributed storage system may simply change how it translates the virtual location requested by the user or application. This includes the ability to move storage from one storage device to another to address capacity, workload, and/or other requirements. These changes in implementation details are often hidden or transparent from the application or the user, which access the storage by making storage requests using an interface, such as an application programming interface (API), and providing the virtual location information for the requested storage. These virtualized and/or abstracted features of distributed storage systems may make them useful in cloud computing systems.
And while distributed storage provides great flexibility to the storage provider, it often comes with some cost to the applications and/or users accessing the distributed storage. For example, distributed storage is typically accessed over a network, such as the Internet. This may add overhead to storage requests as both the storage request and the response to the storage request may have to travel across the network. At a minimum this introduces latency or delay in the handling of the storage requests. In some cases applications and/or users may be tolerant of high latency to storage requests, but in other cases high latency may unacceptably impact performance of the applications making the storage requests. Additionally, because the distributed storage is often shared by multiple applications and/or users, competition among the applications and/or users may result in temporary, or even extended, periods where one or more of the resources of the distributed storage system are unable to satisfy each of the demands placed on those resources by the storage requests from the applications and/or users. In some examples, one or more of the network links in the distributed storage system may not have sufficient bandwidth to transmit the data being requested. This may result in reduced performance of the affected applications. In some examples, one or more of the network switching devices and/or storage devices may not be able to handle the input/output operations (IOPS) associated with the storage requests. This may also reduce the performance of the affected applications.
To address the impact on the performance of applications, distributed storage systems often support one or more quality of service (QoS) mechanisms that may be used to reserve bandwidth and/or TOPS, control latency, and/or the like on an application-by-application basis. Unfortunately, the relationships between bandwidth, TOPS, and latency, and the performance of the applications are not always well understood, even by system administrators who have a specialized understanding of both the applications and the distributed storage system. Further, adjustments to the QoS mechanisms that impact bandwidth, TOPS, and latency cannot generally be made in isolation for one application, because adjustments to bandwidth, TOPS, and/or latency for one application may impact the bandwidth, TOPS, and/or latency of the other applications using the same distributed storage system.
Accordingly, it would be desirable to provide improved methods and systems for managing application performance though adjustments in QoS mechanisms of associated storage systems.
In the figures, elements having the same designations have the same or similar functions.